2011-11-29 24 views
6


Ai đó có thể cho tôi biết cách buộc Doctrine tạo bảng cơ sở dữ liệu bằng mã UTF-8 và utf8_polish_ci? tập tin thuyết cấu hình của tôi có này tham số cấu hình db:Doctrine 2.1 và bảng mã utf-8

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

Tuy nhiên, nó vẫn tạo bảng với mã hóa mặc định: latin1latin1_swedish_ci.

+0

Tại sao bạn sử dụng học thuyết để * tạo * bảng ở nơi đầu tiên? Có phải đó không phải là điều bạn làm trong bất kỳ công cụ quản trị cơ sở dữ liệu nào bạn sử dụng không? –

+7

@Pekka - để Doctrine2 quản lý các câu lệnh DDL của bạn cho bạn là cách ưa thích để thực hiện các công việc trong Doctrine2. orm: schema-tool: [create | update] là các lệnh có liên quan cho công cụ dòng lệnh. – timdev

Trả lời

7

Bạn đặt nó trong cơ sở dữ liệu của mình, giáo lý chỉ sử dụng các giá trị mặc định của cơ sở dữ liệu. Xem câu hỏi này từ số Doctrine 2.1 FAQ:

4.1.1. Làm thế nào để tôi đặt bộ ký tự và đối chiếu cho các bảng MySQL?

Bạn không thể đặt các giá trị này bên trong các tệp ánh xạ chú thích, yml hoặc xml. Để làm cho cơ sở dữ liệu hoạt động với bộ ký tự và đối chiếu mặc định, bạn nên định cấu hình MySQL để sử dụng nó làm bộ ký tự mặc định hoặc tạo cơ sở dữ liệu với các chi tiết đối chiếu và bộ ký tự. Bằng cách này, họ được kế thừa tất cả các bảng và cột cơ sở dữ liệu mới được tạo.

+0

Tôi có thể đặt các giá trị mặc định của DB của mình ở đâu? –

3

Khi bạn tạo cơ sở dữ liệu của bạn, bạn nên tạo nó như thế này:

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

mà sẽ cho phép bàn tạo của bạn để kế thừa charset và đối chiếu giá trị

+0

Cảm ơn vì điều này :) –

4

Sử dụng mã dưới đây để thiết lập Doctrine collation, charset và engine:

/** 
* @ORM\Table(name="temporary", options={"collate"="utf16_latin_ci", "charset"="utf16", "engine"="MyISAM"}) 
* @ORM\Entity 
*/ 
Các vấn đề liên quan