2010-07-01 18 views

Trả lời

1

MySQL varchar loại không phân biệt chữ hoa chữ thường. Những gì bạn muốn là varbinary.

CREATE TABLE IF NOT EXISTS `stuff` (
    `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `name` varbinary(255) NOT NULL   -- varbinary to be case sensitive 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+0

Không hoàn toàn đúng là 'varchar' phân biệt chữ hoa chữ thường - nó phụ thuộc vào bảng đối chiếu. Ví dụ: 'utf8_unicode_cs' phân biệt chữ hoa chữ thường, trong khi' utf8_unicode_cs' thì không. – Mike

+0

Nhưng làm thế nào tôi có thể có JPA tự động cài đặt này khi tạo lược đồ tự động? Tôi không muốn thao tác lược đồ đã tạo bằng tay mỗi lần tôi sử dụng chương trình của mình trên một cá thể máy tính hoặc cơ sở dữ liệu khác. – ali

+0

Tôi không biết gì về JPA, nhưng tôi vừa tìm thấy [Ký tự mã hóa UTF-8 với JPA/Hibernate, MySql và Tomcat] (http://mathiasrichter.blogspot.com/2009/10/character-encoding-utf -8-with.html). Nó có thể là một số sử dụng. – Mike

7

Chú thích @Column trên trường của bạn có thể chỉ định thuộc tính cộtĐịnh nghĩa có thể cho phép bạn chỉ định collation phân biệt chữ hoa chữ thường cho cột.

public abstract String columnDefinition

        (Tùy chọn) Đoạn SQL được sử dụng khi tạo DDL cho cột.
        Mặc định SQL được tạo để tạo cột thuộc loại được phỏng đoán.
        Mặc định:
                ""

Trong trường hợp của bạn, ví dụ, bằng cách sử dụng chú thích @column, bạn sẽ sử dụng

@column (name = "NAME_COL", columnDefinition = "VARCHAR (250) COLLATE latin1_g eneral_cs ") riêng Tên chuỗi;

+0

Không hoạt động không may. Nếu tôi làm như được thông báo có vẻ như là JPA có vấn đề ánh xạ các kiểu dữ liệu String vào cột và ném một ngoại lệ. – ali

+1

Bạn có thể cung cấp ngoại lệ và thông báo của nó không? Bạn đang sử dụng triển khai JPA nào? – jbindel

Các vấn đề liên quan