source

MySQL에서 이름 utf8을 설정하시겠습니까?

factcode 2022. 9. 20. 23:53
반응형

MySQL에서 이름 utf8을 설정하시겠습니까?

MySQL을 사용하는 PHP 스크립트에서 다음과 같은 것을 자주 볼 수 있습니다.

query("SET NAMES utf8");   

저는 아직 어떤 프로젝트에서도 이것을 할 필요가 없었기 때문에 몇 가지 기본적인 질문이 있습니다.

  1. 이것은 PDO만으로 행해지는 것입니까?
  2. PDO 고유의 것이 아닌 경우, 그 목적은 무엇입니까?mysql 인코딩을 설정하고 있는 것은 알고 있습니다만, 사용할 필요가 없었는데, 왜 사용하려고 합니까?

이는 순수 ASCII로 나타낼 수 없는 문자(예: ''' 또는 'ö')를 가진 데이터를 서버로 전송하려는 경우 항상 필요합니다.

MySQL 인스턴스가 클라이언트 접속에서 UTF-8 인코딩을 디폴트로 상정하도록 설정되어 있지 않은 경우(대부분은 로케이션과 플랫폼에 따라 다릅니다).

Unicode 의 구조를 모르는 경우는, http://www.joelonsoftware.com/articles/Unicode.html 를 참조해 주세요.

"SET NAMES"를 사용하여 대체 SET NAMES를 확인할지 여부 및 정확히 어떤 내용인지 확인.

매뉴얼:

SET NAMES는 SQL 문을 서버로 보내기 위해 클라이언트가 사용하는 문자 집합을 나타냅니다.

좀 더 자세히 설명하겠습니다(다시 한 번 설명서에서 무료로 삭제).

SET NAMES는 SQL 문을 서버로 보내기 위해 클라이언트가 사용하는 문자 집합을 나타냅니다.따라서 SET NAMES 'cp1251'은 서버에 "이 클라이언트로부터의 향후 착신 메시지는 문자 집합 cp1251"로 통지합니다.또한 서버에서 클라이언트에 결과를 반환하기 위해 사용해야 하는 문자 집합도 지정합니다(예를 들어 SELECT 문을 사용할 경우 열 값에 사용할 문자 집합을 나타냅니다).

올바른 인코딩을 하는 것은 매우 어렵습니다.레이어가 너무 많습니다.

  • 브라우저
  • 페이지입니다.
  • PHP
  • MySQL

PHP의 SQL 명령어 "SET CHARSET utf8"은 클라이언트 측(PHP)이 데이터베이스에 저장되는 방법에 관계없이 utf8로 데이터를 가져옵니다.물론 먼저 올바르게 저장해야 합니다.

DDL 정의와 실제 데이터 비교

테이블/컬럼에 대해 정의된 인코딩은 데이터가 해당 인코딩에 있음을 의미하지 않습니다.이 '아주 좋다'로 정의되어 utf8, 을 "으로 합니다.utf8그리고 넌 곤경에 처했어그 말은 네가 먼저 이걸 고쳐야 한다는 거야.

확인해야 할 사항

각 레이어에서 데이터 플로우의 부호화를 확인해야 합니다.

  • HTTP 헤더, 헤더를 확인합니다.
  • 요청 본문에 실제로 전송된 내용을 확인합니다.
  • MySQL에는 거의 모든 곳에 인코딩 기능이 있습니다.
    • 데이터베이스
    • 테이블
    • 서버 전체
    • 고객
      어디에나 제대로 된 것이 있는지 확인하세요.

변환

예를 들어, 데이터를 수신했을 경우. windows-1250, 저장하기를 원합니다.utf-8저장하기 전에 다음 SQL을 사용합니다.

SET NAMES 'cp1250';

DB에 데이터가 있는 경우windows-1250재기하고 싶다utf8, 사용방법:

SET CHARSET 'utf8';

몇 가지 주의사항:

  • 데이터를 표시하기 위해 너무 "스마트"한 도구에 의존하지 마십시오.예를 들어 phpMyAdmin은 인코딩을 매우 잘못하고 있습니다.그리고 모든 층을 다 뒤져서 찾기가 어려워요.
  • 또한 Internet Explorer는 이상한 규칙에 따라 인코딩을 "추측"하는 정말 어리석은 행동을 했다.
  • 인코딩을 전환할 수 있는 단순 편집기를 사용합니다.MySQL Workbench를 추천합니다.

이 쿼리는 데이터베이스에 데이터를 만들거나 업데이트하는 쿼리 전에 작성해야 합니다.이 쿼리는 다음과 같습니다.

mysql_query("set names 'utf8'");

예를 들어 utf-8을 사용하는 경우 헤더에 이렇게 추가합니다.그렇지 않으면 Internet Explorer에서 문제가 발생합니다.

그래서 당신의 페이지는 이렇게 보입니다.

<html>
    <head>
        <title>page title</title>
        <meta charset="UTF-8" />   
    </head>
    <body>
    <?php
            mysql_query("set names 'utf8'");   
            $sql = "INSERT * FROM ..... ";  
            mysql_query($sql);
    ?>    

    </body>
</html>

해결책은

 $conn->set_charset("utf8");

SQL 쿼리를 사용하는 대신 php 함수 mysqli::set_charset mysqli_set_charset을 사용합니다.

Note:

This is the preferred way to change the charset. Using mysqli_query() to set it (such as SET NAMES utf8) is not recommended.

자세한 내용은 MySQL 문자 집합 개념 섹션을 참조하십시오.

http://www.php.net/manual/en/mysqli.set-charset.php 에서

모두 감사합니다!

사용하지 않음: query("SET NAMS utf8")는 셋업 정보이며 쿼리가 아닙니다.setCharset()(또는 유사한 메서드)로 접속을 시작할 때 바로 배치합니다.

박티스의 작은 것:

상태:

  • 기본적으로는 mysql 서버가 latin1을 말합니다.
  • 당신의 홀 앱은 utf8입니다.
  • 추가(so: latin1) 없이 연결이 이루어집니다(SET NAMEs utf8 ..., set_charset() 메서드/함수 없음).

긴 mysql은 문자를 처리할 수 있기 때문에 데이터를 저장하고 읽는 것은 문제가 없습니다.db를 보면 이미 쓰레기가 있다는 것을 알 수 있습니다(예를 들어 phpmyadmin 사용).

지금까지 이것은 문제가 되지 않았다!(하지만 (유럽에서) 자주 작동합니다.) ..

..다른 클라이언트/클라이언트 또는 변경된 라이브러리가 올바르게 동작하지 않는 한 데이터를 읽거나 저장합니다.그럼 큰일이네요!

PDO뿐만 아니라sql이 다음과 같이 대답하는 경우--?' 기호, 사전 설정된 문자 집합(희망 UTF-8)은 다음과 같이 권장합니다.

if (!$mysqli->set_charset("utf8")) 
 { printf("Can't set utf8: %s\n", $mysqli->error); }

스타일에 'Rescedure style'mysqli_set_charset($db,"utf8")

언급URL : https://stackoverflow.com/questions/2159434/set-names-utf8-in-mysql

반응형