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

Mal*_*ngh 29 mysql database odbc driver difference

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

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

这两者有什么区别?

boh*_*ica 22

首先,我应该说我不使用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位(有损)并转换为8位您传递给UCS-2的驱动程序的数据.所以不要这样做.

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


小智 5

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

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

我希望你明白了这一点;)