在 mysql 中存储汉字

Storing Chinese Characters in mysql

我正在尝试将中文字符存储到 mysql 数据库,但我做不到。

将 table 的字符集更改为 utf8utf8mb4

Table 看起来像这样


id  bigint(20)  NO  PRI     auto_increment
version bigint(20)  YES         
country varchar(255)    YES         
englishName varchar(255)    YES
chineseName varchar(255)    YES     
                

正在尝试使用以下查询将 chineseName 单元格更改为中文。

UPDATE nametable` SET `chineseName` = '上海' WHERE (`id` = '1');

依旧报错如下。 ERROR 1366: 1366: Incorrect string value: '\xE4\xB8\x8A\xE6\xB5\xB7...' for column 'code' at row 1

您在评论中回答说这是您更改字符集所做的:

ALTER TABLE nameTable CHARACTER SET = utf8mb4 , COLLATE = utf8mb4_bin

这只会更改 table 的默认字符集和排序规则。它不会更改现有列,它仅适用于您添加到 table.

的未来列

下面是 table 更改后的样子:

mysql> SHOW CREATE TABLE nameTable\G

CREATE TABLE `nameTable` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `version` bigint(20) DEFAULT NULL,
  `country` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `englishName` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `chinesename` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

您可以看到 table 的默认值(在最后一行)已更改,但每一列仍然具有旧字符集。

您可以一一转换现有的列,或者您可以通过这种方式一次转换它们:

mysql> ALTER TABLE nameTable CONVERT TO CHARACTER SET utf8mb4, COLLATE utf8mb4_bin;

mysql> SHOW CREATE TABLE nameTable\G

CREATE TABLE `nameTable` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `version` bigint(20) DEFAULT NULL,
  `country` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
  `englishName` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
  `chinesename` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin 

现在所有列都已转换。

MySQL 对于每列何时显示其字符集有一些奇怪的规则。参见