Мы столкнулись именно с этой проблемой при составлении запросов для нашего продукта с использованием DB2.
У нас был запрос по строкам:
select fn (COLUMN_NAME,5.2) from TABLE_NAME
и 5.2
фактически вставлялось нашим программным обеспечением динамически на основе выбора пользователя (забудьте пока об атаках путем внедрения, они были предотвращены с помощью других средств).
В локалях, где «пять и две десятых» записывалось как 5,2
(чертовы эти европейцы), мы получили:
select fn (COLUMN_NAME,5,2) from TABLE_NAME
на что DB2 горько жаловалась.
Предложенное IBM решение состояло в том, чтобы гарантировать, что у разделительных запятых есть пробелы с обеих сторон, а у десятичных запятых нет:
select fn (COLUMN_NAME , 5,2) from TABLE_NAME
Но вы обнаружите, что многие языки решают эту проблему именно недружественным способом, который вы упомянули. Ни один из C-подобных стандартов ISO (ну, во всяком случае, ни один из тех, о которых я знаю) не позволяет объявлять постоянное число как 5,2
, несмотря на то, что ISO является очень "интернационализированной" организацией. Они также не требуют, чтобы ключевые слова, такие как if
, while
и for
, были локализованы на арабский, монгольский или клингонский :-)
person
paxdiablo
schedule
12.04.2012