2013-10-10 15 views
5

Tôi đang cố gắng để kết nối với một cơ sở dữ liệu Firebird chạy trong cửa sổ từ một khách hàng Linux, và khi cố gắng tùy viên cơ sở dữ liệu tôi nhận được lỗi sau:Firebird CHARACTER SET UTF8 không được định nghĩa

bad parameters on attach or create database, CHARACTER SET UTF8 is not defined 

Tôi có googled và tìm kiếm câu trả lời ở đây nhưng dường như không thể tìm ra giải pháp.

Bất kỳ đề xuất nào về cách điều này có thể được khắc phục từ phía máy khách, hoặc nó có yêu cầu dữ liệu được xây dựng lại với sự hỗ trợ UTF8 không?

Client-side Tôi đang sử dụng nút-js với các module node-Firebird, phiên bản máy chủ cơ bên là 2.5, ODS Phiên bản 11,2

function dbConnect(cb){ 
    fb.attach({ 
     host: '192.168.42.233', 
     database: 'gi', 
     user: 'SYSDBA', 
     password: 'xxxxx' 
    }, function(err, db){ 
     if (err) console.log(err.message); 
     else cb(db); 

    }) 
} 
+0

Bạn sử dụng ổ đĩa gì để kết nối với máy chủ? –

+0

Xin chào, Phía khách hàng Tôi đang sử dụng nút nút với mô-đun nút lửa. – crankshaft

+1

Vui lòng bao gồm mã bạn sử dụng để kết nối, phiên bản ODS của cơ sở dữ liệu và phiên bản Firebird. –

Trả lời

2

bình luận Harriv của nhắc nhở tôi để kiểm tra ý tưởng của tôi rằng đây có thể là do mục nhập bị thiếu trong số RDB$CHARACTER_SETS. Nếu tôi tự xóa UTF8 từ bảng hệ thống này tôi nhận được lỗi tương tự khi tôi cố gắng để kết nối với UTF8:

SQL Message : -924 
Connection error 

Engine Code : 335544325 
Engine Message : 
bad parameters on attach or create database 
CHARACTER SET UTF8 is not defined 

Giải pháp là để sao lưu cơ sở dữ liệu và khôi phục lại nó một lần nữa. Điều đó sẽ tạo lại bảng hệ thống RDB$CHARACTER_SETS để bao gồm lại UTF8.

Lưu ý rằng thao tác này sẽ chỉ giải quyết được sự cố của bạn nếu thiếu UTF8 từ RDB$CHARACTER_SETS. Nếu có, bạn nên tự hỏi tại sao nó bị thiếu ở nơi đầu tiên. Có thể một DBA hoặc nhà phát triển khác đã xóa các mục nhập từ RDB$CHARACTER_SETS, nếu vậy, có thể là một ý tưởng hay để tìm hiểu lý do tại sao điều đó được thực hiện.

Ví dụ: Có thể cơ sở dữ liệu sử dụng NONE làm ký tự mặc định (và cho mỗi cột) và đây là cách để đảm bảo mọi người chỉ kết nối với ký tự 'đúng' bằng cách xóa tất cả các tùy chọn khác (cơ sở dữ liệu Firebird 2.5 bình thường) chứa 52 mục trong số RDB$CHARACTER_SETS). Nếu đúng như vậy, hãy đảm bảo bạn khắc phục sự cố này trước khi kết nối với UTF8, nếu không, bạn có thể gặp phải một số dạng tham nhũng dữ liệu (đọc hoặc viết) bằng cách chuyển ngữ không chính xác.

Việc sửa lỗi này sẽ là tạo cơ sở dữ liệu mới với ký tự mặc định phù hợp (và cho cột) và bơm dữ liệu từ cũ sang mới (đảm bảo đọc và ghi được thực hiện bằng ký tự thích hợp) bộ). Sau đó Firebird có thể chăm sóc chuyển tự giữa bộ ký tự cơ sở dữ liệu (hoặc cột) và bộ ký tự kết nối (ngoại trừ các ứng dụng kết nối bằng cách sử dụng NONE làm bộ ký tự kết nối).

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