我正在尝试在介绍人级别设置数据库排序规则。但是当我从表中获取数据时,我看到了不同的字符。
mysql> DROP TABLE IF EXISTS test.tblname;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> CREATE TABLE test.tblname (
-> colnm VARCHAR(50)
-> CHARACTER SET euckr
-> COLLATE euckr_bin
-> );
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> INSERT INTO test.tblname VALUES (_euckr'가');
Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql> INSERT INTO test.tblname VALUES (_euckr'각');
Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql> INSERT INTO test.tblname VALUES (_euckr'갂');
Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql> INSERT INTO test.tblname VALUES (_euckr'갃');
Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql>
mysql> SELECT * FROM test.tblname;
+-------+
| colnm |
+-------+
| 媛 |
| 媛 |
| 媛 |
| 媛 |
+-------+
4 rows in set (0.00 sec)
mysql>
当我尝试插入数据时,就像" INSERT INTO test.tblname VALUES('가');"我看到数据已正确返回。
答案 0 :(得分:0)
introducer告诉解析器"后面的字符串使用字符集charset_name。"。因此,您告诉解析器您的角色在EUC-KR中,但实际上您可能在UTF8中键入它,因为它是您客户的字符集(您可以通过以下方式验证:show variables like 'character_set_client';
)< / p>
你应该注意这个:
查询正常,1行受影响, 2警告(0.00秒)
插入后使用show warnings;
来显示警告。你可能有一个说'#34;字符串值不正确&#34;。
答案 1 :(得分:0)
是的,您可以使用介绍人,但仅适用于。
CONVERT(BINARY('갃') USING euckr) --> '媛'
UNHEX(HEX(CONVERT(CONVERT(UNHEX('B0A2') USING euckr) USING utf8))) --> '각'
也就是说,如果您以某种方式将B0A2
输入
INSERT INTO test.tblname VALUES (_euckr'...');
然后将正确插入。你有一个能生成这种2字节EUCKR代码的键盘吗?
对于几乎所有应用程序,请使用utf8mb4
。仅当源字节采用某种非UTF-8编码时才使用其他内容(例如euckr
)。