Jestem nowy w Sequelize.js i Node.js, nasza baza danych backendu to SQL Server 2014, więc używamy Sequelize.js jako warstwy ORM, Musimy obsługiwać znaki inne niż angielskie w naszych danych.Jak zrobić sequelize dodać N przed ciągiem Unicode w jego instrukcji SQL?
gdy próbuję użyć sequelize stworzyć metodę wstawiania niż angielska char, tylko mam ???
w dB, po debugowania okazało się, że powodem tak jak poniżej, ale nie wiem, czy jest jakiś istniały dobre rozwiązanie naprawić to.
Poniżej znajduje się jeden model testowy, który utworzyłem w mojej aplikacji, użyję metody sequelize.import do wygenerowania schematu tabeli, następnie wywołaję metodę fillTestData, aby wstawić dane testowe do DB po wywołaniu synchronizacji z serwerem DB, ale ja tylko uzyskać dużo '????'
w tabeli DB.
var Promise = require("sequelize").Promise;
module.exports = function(sequelize, DataTypes) {
var Test = sequelize.define("Test", {
ID: {
type: DataTypes.BIGINT,
primaryKey: true,
autoIncrement: true
},
Name: {
type: DataTypes.STRING(255),
allowNull: true
}
}, {
charset: "utf8",
classMethods: {
fillTestData: function(models) {
return Promise.join(
Test.create({Name: "hello"}),
Test.create({Name: "aello"}),
Test.create({Name: "Aello"}),
Test.create({Name: "bello"}),
Test.create({Name: "こんにちは"}),
Test.create({Name: "مرحبا"}),
Test.create({Name: "ជំរាបសួរ"}),
Test.create({Name: "მიესალმები"}),
Test.create({Name: "Hallå"}),
Test.create({Name: "你好"}),
Test.create({Name: "我們"}),
Test.create({Name: "여러분, 안녕하세요"}),
Test.create({Name: "Всем привет"}),
Test.create({Name: "ENLE o gbogbo eniyan"}),
Test.create({Name: "सभी को नमस्कार"}));
}
}
});
return Test;
};
sprawdzić rejestr wyjściowy node.js, okazało się, że sequelize tłumaczyć powyżej utworzyć prośbę do poniżej SQL:
INSERT INTO [Test] ([Name]) OUTPUT INSERTED.* VALUES ('我們');
I sprawdził definicji kolumny w bazie danych, to kolumna Nazwa nvarchar, mogę wstawić odpowiednie nieangielskich danych DB z poniżej SQL:
insert into [Test] values (N'我們')
Wtedy zdaję sobie sprawę, że sequelize nie dodawaj „n” przed nieanglojęzycznych ciąg w objaśniające SQL ent.
Następnie próbuję usunąć przyczynę i zlokalizować przyczynę w pliku "sequelize \ lib \ sql-string.js", sequelize wywoła jego metodę escapeId
, aby uzyskać wartość przed wygenerowaniem instrukcji SQL, w tej metodzie wygrywa " t sprawdź, czy trzeba dodać "N" przed ciągiem znaków Unicode dla dialektu mssql. Więc robię małą zmianę do tej metody na końcu jak poniżej:
if(dialect === 'mssql') {
return "N'" + val + "'";
}
else {
return "'" + val + "'";
}
Potem ponownie uruchomić mój wniosek, wszystko może pracować jako moje oczekiwania, cały ciąg Unicode mogą być przechowywane w bazie danych poprawnie teraz.
Ale to nie jest dobra poprawka, spodziewałem się, że sequelize powinien wziąć pod uwagę tego rodzaju wymagania i podać pewne definicje, takie jak zestaw znaków, więc nie muszę o to dbać sam.
Czy ktoś może wiedzieć, jak z wdziękiem rozwiązać ten problem?