Diferencia entre los controladores ANSI y Unicode de MySQL


Al elegir la fuente de datos bajo ODBC (64 Bits) en Windows, obtengo dos opciones disponibles de la base de datos MySQL:

  • MySQL ODBC 5.3 ANSI Driver
  • MySQL ODBC 5.3 Unicode Driver

¿Cuál es la diferencia entre estos dos?

Author: Malwinder Singh, 2014-09-17

2 answers

En primer lugar debo decir que no uso MySQL, pero sí sé acerca de los controladores ODBC. En ODBC hay diferentes APIs para unicode y ansi. Las API ansi terminan en A y las API unicode terminan en W (por ejemplo, SQLPrepareA y SQLPrepareW). Las API ansi aceptan bytes / octetos para cadenas de caracteres y, por lo tanto, solo pueden manejar chrs 0-255. Las API de unicode aceptan SQLWCHARs que son puntos de código unicode codificados UCS-2 de 2 bytes (las versiones más recientes de MS SQL Server pueden manejar cadenas codificadas UTF16) y, por lo tanto, pueden manejar aproximadamente los primeros 65000 puntos de código en unicode.

Por lo tanto, si necesita almacenar datos unicode, no tiene opción de qué controlador usar.

No dejaría que los comentarios sobre la velocidad de Carnangel te desanimen usando el controlador unicode y, en cualquier caso, sus comentarios no incluyen ningún hecho. Se puede estar refiriendo a:

Si almacena datos unicode en MySQL, se codificarán en UTF-8 y se transferirán a través de su red como UTF-8. Al final del cliente, el controlador ODBC tendrá que convertir UTF-8 codificó los datos en UCS-2 ya que esto es lo que necesita ODBC. Obviamente se aplica lo contrario.

Si escribe una aplicación ANSI ODBC (es decir, una que utiliza las api ansi ODBC) con un controlador ODBC unicode, el administrador de controladores ODBC tendrá que convertir el UCS-2 que el controlador devuelve a 8 bits (con pérdida) y convertir los datos de 8 bits que pase al controlador a UCS-2. Así que no hagas eso.

En estos días me sorprendería si alguien todavía está usando controladores ODBC ANSI.

 16
Author: bohica,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-18 08:49:09

Como puede saber, Ansi y unicode se aplican al tipo de carácter de datos. Puede elegir uno u otro, no es una cuestión de procesador Aquí está la diferencia entre ellos: - Unicode le permite tener todas las propiedades de caracteres habilitadas, pero reduciendo el tratamiento de velocidad bruta - Ansi, lo contrario, menos tipo de carácter, pero el tratamiento de velocidad bruta acelerará

Si es un usuario nuevo, tome el Unicode, si no puede elegir el Ansi.

Espero que tengas el punto ;)

 3
Author: Carnangel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-17 11:32:10