首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows上的Mariadb (MySQL) -在查询中输入非ASCII字符的问题

问Windows上的Mariadb (MySQL) -在查询中输入非ASCII字符的问题
EN

Database Administration用户
提问于 2019-02-15 12:56:39
回答 1查看 972关注 0票数 1
代码语言:javascript
复制
MariaDB: mysql  Ver 15.1 Distrib 10.3.8-MariaDB
OS: Windows 7 Pro 64 bit

我把我的服务器数据库和客户端都设置好了(我相信)来支持utf8端到端-

代码语言:javascript
复制
(**my.cnf**)

#
# Set everything to utf8
#
# (per https://mariadb.com/kb/en/library/setting-character-sets-and-collations/)
#
[client]
default_character_set=utf8mb4

[mysql]
default_character_set=utf8mb4

[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'


(**Console**)
    chcp
    Active code page: 65001

(**Mysql client**)
show variables like '%char%';
+--------------------------+-----------------------------------------------+
| Variable_name            | Value                                         |
+--------------------------+-----------------------------------------------+
| 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                                          |
| character_sets_dir       | C:\Program Files\MariaDB 10.3\share\charsets\ |
+--------------------------+-----------------------------------------------+

通过从csv文件导入unicode字符,我可以在数据库中存储和显示unicode字符,如micron ()、Omega (Ω)和em dash (-)。

然而,当我开始使用unicode字符尝试一些查询时,我遇到了一个问题。基本上,在引用字符串中输入“超过7位”unicode字符似乎会向mysql客户端隐藏结束引号,而mysql客户端则停留在引号模式中。简单的例子如下-

代码语言:javascript
复制
MariaDB [uom]> -- Using plain ASCII- this works
MariaDB [uom]> select replace('cm', 'c', 'm');
+-------------------------+
| replace('cm', 'c', 'm') |
+-------------------------+
| mm                      |
+-------------------------+
1 row in set (0.000 sec)

MariaDB [uom]> -- Try using a unicode character in the query, this fails
MariaDB [uom]> select replace('µm', 'µ', 'u');
    '>
    '>
    '> '
    -> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1

有趣的是,如果我非交互地运行相同的查询,它就会执行,但是输出似乎表明mysql命令行路径中有什么东西没有使用unicode,因为unicode字符被转换为"?“在输出上-

代码语言:javascript
复制
mysql -e "select replace('µm', 'µ', 'u');"
+-------------------------+
| replace('?m', '?', 'u') |
+-------------------------+
| um                      |
+-------------------------+

很明显我漏掉了一块拼图。任何想法都很受欢迎。

编辑

我正在开发一个非生产数据库,所以我能够(我想)将所有的东西从上到下设置为utf8mb4,并重新导入我的数据。还能看到奇怪的东西-

  1. 系统忽略了character_set_server在my.cnf中的设置。即使我有行- character_set_server = utf8mb4

在my.cnf中,系统仍然报告在重新启动服务器后将其设置为"utf8“。如果我在客户机中以交互方式发出逗号和set character_set_server='utf8mb4';,变量会更改会话的值,但这不会影响其他问题。

  1. 当我导入一个包含7位以上字符的"latin1“文件(实际上是cp1252,但Mariadb坚持要调用这个latin1)时,我看到的是双编码。例如:选择单元,六角形(左(单位,2))从代码清单在哪里id=3;+(2)++

应该是十六进制B5的“微”字符被存储为xC2B5,这是一个中文/汉格尔字符。由于服务器、客户端和连接都设置为utf8mb4,并且我正在导入的csv文件标识为latin1,我无法理解为什么会发生双重编码。

myql客户端程序的奇怪之处(发射"?“)命令中的字符,即使它设置为utf8mb4运行-

代码语言:javascript
复制
mysql -e "select replace('µm', 'µ', 'u');"
+-------------------------+
| replace('?m', '?', 'u') |
+-------------------------+
| um                      |
+-------------------------+

mysql -e "show variables like '%char%';"
+--------------------------+-----------------------------------------------+
| Variable_name            | Value                                         |
+--------------------------+-----------------------------------------------+
| character_set_client     | utf8mb4                                       |
| character_set_connection | utf8mb4                                       |
| character_set_database   | utf8mb4                                       |
| character_set_filesystem | binary                                        |
| character_set_results    | utf8mb4                                       |
| character_set_server     | utf8                                          |
| character_set_system     | utf8                                          |
| character_sets_dir       | C:\Program Files\MariaDB 10.3\share\charsets\ |
+--------------------------+-----------------------------------------------+

输入查询字符串(包括微符号之类的字符)的阻塞也在继续。

它看起来要么是Mariadb客户端没有正确地实现它给定的字符集设置,要么是Windows本身在破坏环境中的一些东西。

最后,我可能会在linux上尝试确定到底是Mariadb端还是操作系统造成了问题。

EN

回答 1

Database Administration用户

发布于 2019-02-17 01:45:14

使用cmd提示符时,将该窗口设置为使用代码页chcp 65001:

命令"chcp“控制”代码页“。chcp 65001提供了utf8,但它也需要安装一个特殊的字符集。一些代码页。要在控制台窗口中设置字体:右键单击窗口的标题→属性→字体→选择Lucida控制台

另见https://dev.mysql.com/doc/refman/5.6/en/mysql-tips.html#windows-unicode-support

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/229845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档