我们可以在insert语句中设置排序规则吗?

时间:2018-01-10 11:11:55

标签: mysql database collation

我正在尝试在介绍人级别设置数据库排序规则。但是当我从表中获取数据时,我看到了不同的字符。

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('가');"我看到数据已正确返回。

2 个答案:

答案 0 :(得分:0)

introducer告诉解析器&#34;后面的字符串使用字符集charset_name。&#34;。因此,您告诉解析器您的角色在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)。