MySQL的ANSI和Unicode驱动程序之间的区别

时间:2014-09-17 11:13:53

标签: mysql database odbc driver difference

在Windows上选择ODBC(64位)下的数据源时,我得到两个可用的MySQL数据库选项:

  • MySQL ODBC 5.3 ANSI驱动程序
  • MySQL ODBC 5.3 Unicode驱动程序

这两者有什么区别?

2 个答案:

答案 0 :(得分:19)

首先,我应该说我不使用MySQL,但我确实知道ODBC驱动程序。在ODBC中,unicode和ansi有不同的API。 ansi API以A结尾,unicode API以W结尾(例如,SQLPrepareA和SQLPrepareW)。 ansi API接受字符串的字节/八位字节,因此只能处理chrs 0-255。 unicode API接受SQLWCHAR,它是2字节UCS-2编码的unicode代码点(较新的MS SQL Server版本可以处理UTF16编码的字符串),因此可以处理大约在unicode中的前65000个代码点。

因此,如果您需要存储unicode数据,则无法选择使用哪种驱动程序。

我不会让Carnangel对速度的评论让你不能使用unicode驱动程序,无论如何他的评论不包括任何事实。他可能指的是:

如果您在MySQL中存储unicode数据,它将以UTF-8编码并通过您的网络以UTF-8传输。在客户端,ODBC驱动程序必须将UTF-8编码数据转换为UCS-2,因为这是ODBC所需要的。显然反过来了。

如果您使用unicode ODBC驱动程序编写ANSI ODBC应用程序(使用ansi ODBC apis的应用程序),则ODBC驱动程序管理器必须将UCS-2转换为驱动程序返回8位(有损)并转换传递给驱动程序到UCS-2的8位数据。所以不要这样做。

如果有人还在使用ANSI ODBC驱动程序,我会感到惊讶。

答案 1 :(得分:4)

您可能知道Ansi和unicode应用于数据字符类型。 你可以选择其中一个,这不是处理器的问题 这是他们之间的区别: - Unicode允许您启用所有字符属性但减少原始速度处理 - 相反的Ansi,字符类型少,但原始速度处理会加快

如果您是新用户,请使用Unicode,如果不是,您可以选择Ansi。

我希望你明白这一点;)