繁体   English   中英

无法在mysql数据库中插入一些中文字符

[英]Cannot insert some chinese characters into mysql-database

我很难正确设置mysql数据库的编码。 无法正确插入一些中文字符。 我在Windows上使用xampp并具有下表:

CREATE TABLE `Kanji` (
`ID`    MEDIUMINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`Kanji` VARCHAR(40) NOT NULL UNIQUE
);

以下插入无效:

INSERT INTO Kanji (Kanji)
VALUES ('𩺊');

当我在phpMyAdmin中检查表的内容时,它仅显示一个“?”。 插入其他汉字作品(例如“陆”)。

这是我的数据库的编码设置:

character_set_client     | utf8mb4
character_set_connection | utf8mb4
character_set_database   | utf8mb4
character_set_filesystem | binary
character_set_results    | utf8mb4
character_set_server     | utf8mb4
character_set_system     | utf8              
collation_connection     | utf8mb4_general_ci
collation_database       | utf8mb4_general_ci
collation_server         | utf8mb4_general_ci

任何想法有什么问题吗?

这与utf8无法处理4字节字符有关,如下所述:

https://dev.mysql.com/doc/refman/5.7/zh-CN/charset-unicode-utf8mb4.html

为了解决这个问题,我必须:

1) 尝试通过JDBC将UTF-8插入MySQL时,运行在注释部分下的三个ALTER语句,标记为正确答案: “字符串值不正确”?

(下面在我创建的测试用例中显示了ALTER语句)

2)在MySQL Workbench中设置JDBC字符集:从https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html (也在下面的测试案例中)

----------------------------

这是我通过My​​SQL Workbench创建的测试用例:

-- I was able to re-produce your case:

create table test.kanji ( col varchar(20) ) ;

INSERT INTO test.kanji (col) VALUES ('𩺊');

select * from test.kanji ;
------
? 

---- The solution:

; -- From link 1:
ALTER DATABASE test CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_520_ci;

ALTER TABLE test.kanji CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;

ALTER TABLE test.kanji modify col VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci ;


-- From link 2:
set names 'utf8mb4' ; 


select * from test.kanji ;
---------
? <-- Interesting, this did not clean-up the data we inserted.

;
-- Insert a new row now that we are using utf8mb4 in the connection:
INSERT INTO test.kanji (col) VALUES ('𩺊');


select * from test.kanji ;
---------
?  <-- The first insert - still "dirty"
𩺊 <-- The second insert is correct.


-- In case you want to re-set everything back to utf8:
;
ALTER DATABASE test CHARACTER SET = utf8 COLLATE = utf8_general_ci;
ALTER TABLE test.kanji CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE test.kanji modify col VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM