Что для меня работало, так это создать модель представления, содержащую свойство date в виде строки. Присвоение свойства DateTime из модели домена и вызов .ToString () в свойстве date при назначении значения в viewmodel.
Результат JSON из метода действия MVC возвращает дату в формате, совместимом с представлением.
public class TransactionsViewModel
{
public string DateInitiated { get; set; }
public string DateCompleted { get; set; }
}
public class Transaction{
public DateTime? DateInitiated {get; set;}
public DateTime? DateCompleted {get; set;}
}
public JsonResult GetTransactions(){
var transactions = _transactionsRepository.All;
var model = new List<TransactionsViewModel>();
foreach (var transaction in transactions)
{
var item = new TransactionsViewModel
{
...............
DateInitiated = transaction.DateInitiated.ToString(),
DateCompleted = transaction.DateCompleted.ToString(),
};
model.Add(item);
}
return Json(model, JsonRequestBehavior.AllowGet);
}
Основное различие сортирует точность (при сравнении символов на языке) и производительность. Единственный специальный является utf8_bin, который является для сравнения символов в двоичном формате.
utf8_general_ci
несколько быстрее, чем utf8_unicode_ci
, но менее точен (для сортировки). определенный язык utf8 кодирование (такой как utf8_swedish_ci
) содержит дополнительные правила языка, которые делают их больше всего с точностью до вида для тех языков. Большую часть времени я использую utf8_unicode_ci
(я предпочитаю точность маленьким повышениям производительности), если у меня нет серьезного основания предпочесть определенный язык.
можно читать больше на определенных unicode наборах символов на руководстве MySQL - http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html
На самом деле Вы, вероятно, хотите использовать utf8_unicode_ci
или utf8_general_ci
.
utf8_general_ci
виды путем снимания всех диакритических знаков и сортировки, как будто это был ASCIIutf8_unicode_ci
, используют порядок сортировки Unicode, таким образом, это сортирует правильно на большем количестве языков Однако, если Вы только используете это для хранения английского текста, они не должны отличаться.
Для текстовой информации UTF-8 необходимо использовать utf8_general_ci
потому что...
utf8_bin
: сравните строки двоичным значением каждого символа в строке
utf8_general_ci
: сравните строки с помощью общих правил языка и с помощью нечувствительных к регистру сравнений
иначе это, желание должно, делая поиск и индексацию данных быстрее/больше эффективными/больше полезный.
Сопоставления влияют, как данные отсортированы и как строки сравниваются друг с другом. Это означает, что необходимо использовать сопоставление, которое ожидает большинство пользователей.
Пример от документация :
utf8_general_ci
также является удовлетворительным и для немецкого и для французского языка, за исключением того, что вЂГџвЂ™ равен вЂs’, а не вЂss’. Если это приемлемо для Вашего приложения, то необходимо использоватьutf8_general_ci
, потому что это быстрее. Иначе используйтеutf8_unicode_ci
, потому что это более точно.
Так - это зависит от Вашей ожидаемой базы пользователей и от того, в каком количестве Вы нуждаетесь корректный сортировка. Для английской базы пользователей, utf8_general_ci
должен быть достаточным, для других языков, как шведские, специальные сопоставления были созданы.
Помните об этой проблеме, которая может возникнуть при использовании utf8_general_ci
.
MySQL не будет различать некоторые символы в операторах выбора, если используется сопоставление utf8_general_ci
. Это может привести к очень неприятным ошибкам - особенно, например, когда задействованы имена пользователей. В зависимости от реализации, в которой используются таблицы базы данных, эта проблема может позволить злоумышленникам создать имя пользователя, соответствующее учетной записи администратора.
Эта проблема проявляется, по крайней мере, в ранних версиях 5.x - я не уверен, изменилось ли это поведение позже.
Я не администратор баз данных, но, чтобы избежать этой проблемы, я всегда использую utf8-bin
вместо регистра без учета регистра.
Приведенный ниже сценарий описывает проблему на примере.
-- first, create a sandbox to play in
CREATE DATABASE `sandbox`;
use `sandbox`;
-- next, make sure that your client connection is of the same
-- character/collate type as the one we're going to test next:
charset utf8 collate utf8_general_ci
-- now, create the table and fill it with values
CREATE TABLE `test` (`key` VARCHAR(16), `value` VARCHAR(16) )
CHARACTER SET utf8 COLLATE utf8_general_ci;
INSERT INTO `test` VALUES ('Key ONE', 'value'), ('Key TWO', 'valúe');
-- (verify)
SELECT * FROM `test`;
-- now, expose the problem/bug:
SELECT * FROM test WHERE `value` = 'value';
--
-- Note that we get BOTH keys here! MySQLs UTF8 collates that are
-- case insensitive (ending with _ci) do not distinguish between
-- both values!
--
-- collate 'utf8_bin' doesn't have this problem, as I'll show next:
--
-- first, reset the client connection charset/collate type
charset utf8 collate utf8_bin
-- next, convert the values that we've previously inserted in the table
ALTER TABLE `test` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
-- now, re-check for the bug
SELECT * FROM test WHERE `value` = 'value';
--
-- Note that we get just one key now, as you'd expect.
--
-- This problem appears to be specific to utf8. Next, I'll try to
-- do the same with the 'latin1' charset:
--
-- first, reset the client connection charset/collate type
charset latin1 collate latin1_general_ci
-- next, convert the values that we've previously inserted
-- in the table
ALTER TABLE `test` CONVERT TO CHARACTER SET latin1 COLLATE latin1_general_ci;
-- now, re-check for the bug
SELECT * FROM test WHERE `value` = 'value';
--
-- Again, only one key is returned (expected). This shows
-- that the problem with utf8/utf8_generic_ci isn't present
-- in latin1/latin1_general_ci
--
-- To complete the example, I'll check with the binary collate
-- of latin1 as well:
-- first, reset the client connection charset/collate type
charset latin1 collate latin1_bin
-- next, convert the values that we've previously inserted in the table
ALTER TABLE `test` CONVERT TO CHARACTER SET latin1 COLLATE latin1_bin;
-- now, re-check for the bug
SELECT * FROM test WHERE `value` = 'value';
--
-- Again, only one key is returned (expected).
--
-- Finally, I'll re-introduce the problem in the exact same
-- way (for any sceptics out there):
-- first, reset the client connection charset/collate type
charset utf8 collate utf8_generic_ci
-- next, convert the values that we've previously inserted in the table
ALTER TABLE `test` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
-- now, re-check for the problem/bug
SELECT * FROM test WHERE `value` = 'value';
--
-- Two keys.
--
DROP DATABASE sandbox;