2017-04-13 5 views
0

는 내가 MySQL을 삽입 할 노력하고 내가 같은 오류 메시지가 점점 오전 :MySQL 테이블에 특정 문자를 삽입 할 수없는 이유는 무엇입니까?

Incorrect string value: '\xA0' for column 'foo' at row 1

\xA0\x96 모두 발생합니다.

내가 PHP를 사용하고 내가 mysqli_query()이 쿼리를 전달하고있다 : 여기

INSERT INTO ttest1 (foo) VALUES("test\xA0")

년대 만들 테이블 : 여기

CREATE TABLE ttest1 (
    test_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    foo VARCHAR(32))

MySQL을위한 문자 셋과 콜레 정보입니다 :

character_set_client  utf8mb4 
character_set_connection utf8mb4 
character_set_database  utf8 
character_set_filesystem binary 
character_set_results  utf8mb4 
character_set_server  utf8 
character_set_system  utf8 

collation_connection  utf8mb4_unicode_ci 
collation_database   utf8_general_ci 
collation_server   utf8_general_ci

콜라주 foo 열의 값은 uft8_general_ci입니다.

그렇다면이 설치로 인해 오류가 발생하는 이유는 무엇이며 가장 좋은 해결책은 무엇입니까?

답변

1

\x80\xFF 사이에 유효한 utf8 인코딩이 없으므로 오류는 정확합니다.

코드 포인트 (160) (내지 0xA0)이 (도   또는  라고도 함), UTF8에 0xC20xA0로 인코딩 된 2 바이트 문자이다.

마찬가지로 코드 포인트 150 (0x96)은 0xC20x96으로 인코딩됩니다.

유효한 utf8로 문자열을 인코딩하는 것이 올바른 해결책입니다.

저는 PHP 전문가가 아니지만 MySQL 전문가입니다 (내 청동 PHP 태그 배지에도 불구하고). 분명히 PHP 7은 unicode codepoint escape literals을 도입 했으므로 분명히 "\u{a0}"을 사용할 수 있습니다.

+1

utf8로 텍스트를 전환하는 것이 좋습니다. 하지만 할 수 없다면 대신 연결을'latin1'으로 바꾸십시오. –