2013-07-08 31 views
8

Tôi có một tập lệnh sql (nó chỉ là định nghĩa lược đồ). Kịch bản là một phiên bản sửa đổi (loại bỏ các ký tự xấu h2 không thích) của một câm mysql.Lệnh "chạy lệnh" H2 biến tất cả các tên bảng thành chữ hoa

Tập lệnh chạy và lược đồ được chèn vào cơ sở dữ liệu h2, nhưng vấn đề là tất cả tên cơ sở dữ liệu đều bằng chữ hoa ('xyz' được chuyển thành 'XYZ').

Tôi cần chúng ở dạng chữ thường vì ứng dụng của tôi đang tìm chữ thường (và tất cả các bảng trong db mysql là chữ thường).

Tại sao điều này lại xảy ra? Làm thế nào tôi có thể nói h2 không làm điều đó? Có cách nào tốt hơn để chèn định nghĩa lược đồ vào h2?

Đây là lệnh INT Tôi đang chạy:

jdbc:h2:mem:~/test;INIT=runscript from '~/schema.sql' 

EDIT: Chỉ cần cố gắng này trên h2 console, điều tương tự. Vì vậy, đây không phải là một số vấn đề INIT, đó là với lệnh 'RUNSCRIPT'.

Cố gắng này

RUNSCRIPT FROM '~/schema.sql' 

Trả lời

16

Tìm thấy vấn đề này. Theo mặc định, h2 có cài đặt này được đặt thành true DATABASE_TO_UPPER. Việc đặt thành false sẽ lưu dữ liệu như mong đợi. Vì vậy, trong lệnh init của tôi (trước nó), tôi đã nhập:

jdbc:h2:mem:~/test;DATABASE_TO_UPPER=false;INIT=runscript from '~/schema.sql' 

Bây giờ các bảng được chèn trong trường hợp đúng

6

Một lựa chọn khác là để bọc tên bảng/cột trong dấu ngoặc kép để bảo vệ vỏ.

Ví dụ: create table "products" thay vì create table products

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