2011-11-29 19 views
6


Podría alguien decirme cómo forzar la Doctrina para crear tablas de base de datos con codificación UTF-8 y utf8_polish_ci? Mi archivo de configuración Doctrina tiene esta parámetros de configuración de base de datos:Doctrina 2.1 y las tablas de codificación UTF-8

$conn = array(
    'driver' => 'pdo_mysql', 
    'dbname' => 'test', 
    'user' => 'root', 
    'password' => '*****', 
    'charset' => 'utf8', 
    'driverOptions' => array(1002=>'SET NAMES utf8')); 

Sin embargo, todavía se está creando mesa con codificación por defecto: latin1 y latin1_swedish_ci.

+0

¿Por qué está utilizando la doctrina para * crear * tablas en primer lugar? ¿No sería eso algo que hagas en la herramienta de administración de bases de datos que utilices? –

+7

@Pekka: dejar que Doctrine2 administre sus declaraciones DDL es la forma preferida de hacer las cosas en Doctrine2. orm: schema-tool: [create | update] son ​​los comandos relevantes para la herramienta de línea de comandos. – timdev

Respuesta

7

Lo configura en su base de datos, doctrine solo usa los valores predeterminados de las bases de datos. Consulte esta pregunta en el Doctrine 2.1 FAQ:

4.1.1. ¿Cómo configuro el conjunto de caracteres y la intercalación para las tablas MySQL?

No puede establecer estos valores dentro de los archivos de asignación de anotaciones, yml o xml. Para que una base de datos funcione con el conjunto de caracteres predeterminado y la intercalación, debe configurar MySQL para usarlo como juego de caracteres predeterminado, o crear la base de datos con detalles del conjunto de caracteres y la intercalación. De esta forma, se heredan a todas las columnas y tablas de bases de datos creadas recientemente.

+0

¿Dónde puedo establecer esos valores predeterminados de mi base de datos? –

3

Al crear su base de datos, debe crear de esta manera:

CREATE DATABASE `your_table_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_polish_ci;

que permitirá a sus tablas creadas para heredar el conjunto de caracteres y cotejar los valores

+0

Gracias por esto :) –

4

Use el código siguiente para establecer Intercalación, juego de caracteres y motor Doctrine:

/** 
* @ORM\Table(name="temporary", options={"collate"="utf16_latin_ci", "charset"="utf16", "engine"="MyISAM"}) 
* @ORM\Entity 
*/ 
Cuestiones relacionadas