홈>
내가 시도하는 것 : -elixir에서 erlang-odbc로 선택하고 모든 결과를 콘솔에 덤프하십시오.
환경 : 내 편
- Red Hat Enterprise Linux Server 릴리스 7.6 (Maipo)
- unixODBC 개발 (yum)
- Elixir 1.8.2 (Erlang/OTP 20으로 컴파일)
- Erlang/OTP 21
- erlang-odbc R16B (yum)
- (또는 둘 다) mssql 드라이버
- (또는) FreeTds 드라이버 1.1.6 (소스에서 --unixodbc로 컴파일)
타겟
- MSSQL Server 2016
- 표
CREATE TABLE db_name.dbo.rating (
[Year] int NULL,
Code varchar(256) COLLATE Cyrillic_General_CI_AS NULL,
Name nvarchar(4000) COLLATE Cyrillic_General_CI_AS NULL,
GroupeCode varchar(256) COLLATE Cyrillic_General_CI_AS NULL,
GroupeName nvarchar(4000) COLLATE Cyrillic_General_CI_AS NULL,
Cost numeric(38,5) NOT NULL,
PrchasesCount int NULL
) GO
nvarchar: character_set_name : 유니 코드 collation_name : Cyrillic_General_CI_AS
varchar: character_set_name :cp1251 collation_name : Cyrillic_General_CI_AS
엘릭서 코드는 다음과 같습니다 :
conn_str =
"SERVER=XX.XX.XX.XX,1433;" <>
#tried this too! "DRIVER={ODBC Driver 17 for SQL Server};" <>
"DRIVER=FreeTDS;" <>
"DATABASE=db_name;UID=bot;PWD=XXXXXX;"
|> to_charlist
statement = "select top(3) Name from Rating order by Cost desc" |> to_charlist
{:ok, pid}=:odbc.connect(conn_str,[])
{:selected, col_names, rows} = :odbc.sql_query(pid, statement)
그리고 모든 시도 후에 결과가 이와 같습니다
{:selected, ['Name'],
[
{<<32, 4, 48, 4, 49, 4, 62, 4, 66, 4, 75, 4, 32, 0, 65, 4, 66, 4, 64, 4, 62,
4, 56, 4, 66, 4, 53, 4, 59, 4, 76, 4, 61, 4, 75, 4, 53, 4, 32, 0, 63, 4,
62, 4, 32, ...>>},
{<<16, 4, 64, 4, 53, 4, 61, 4, 52, 4, 48, 4, 32, 0, 63, 4, 48, 4, 65, 4, 65,
4, 48, 4, 54, 4, 56, 4, 64, 4, 65, 4, 58, 4, 62, 4, 51, 4, 62, 4, 32, 0,
66, 4, ...>>},
{<<35, 4, 65, 4, 59, 4, 67, 4, 51, 4, 56, 4, 32, 0, 63, 4, 62, 4, 32, 0, 64,
4, 53, 4, 58, 4, 67, 4, 59, 4, 76, 4, 66, 4, 56, 4, 50, 4, 48, 4, 70, 4,
56, ...>>}
]}
올바른 키릴 문자 대신
임의의 숫자가 아닙니다! 결과는 항상 같습니다.
MS 드라이버는 FreeTDS와 동일한 결과를 제공합니다
내가 시도한 것
- conn 옵션 변경 binary_strings : : on/off
- 설정 옵션 클라이언트 문자 세트 = freetds.conf의 UTF-8 (전역 섹션)
- 머리를 긁다
- : unicode 함수를 사용하여<<데이터 >> 읽기
- 수신 된 번호에 is_binary ()를 사용하면 true가 반환됩니다
질문
- 어떤 유형의 데이터를 받습니까?
- 데이터가 올바르게 디코딩되지 않은 이유는 무엇입니까?
- 어떤 앱이 책임이 있습니까?
- 어떻게 고칠 수 있습니까? freetds의 일부가 여기에 로그인 (iconv에 대해)
iconv.c:326:tds_iconv_open(0x1e02330, UTF-8)
iconv.c:186:local name for ISO-8859-1 is ISO-8859-1
iconv.c:186:local name for UTF-8 is UTF-8
iconv.c:186:local name for UCS-2LE is UCS-2LE
iconv.c:186:local name for UCS-2BE is UCS-2BE
iconv.c:348:setting up conversions for client charset "UTF-8"
iconv.c:350:preparing iconv for "UTF-8" <-> "UCS-2LE" conversion
iconv.c:389:tds_iconv_open: done
iconv.c:785:setting server single-byte charset to "CP1251"
- 답변 # 1
관련 자료
- database - 올바른 결과를 검색하는 SQL Server 쿼리는 무엇입니까?
- reactjs - ApolloClient v3 fetchMore (중첩 된 쿼리 결과 포함)
- sql - 쿼리의 중복 된 결과
- sccm - 사용자 계정에 따라 WMI 쿼리의 결과가 다릅니 까?
- python - 슬라이스를 가져온 후에는 쿼리를 필터링 할 수 없습니다
- python - Django에서 모델 객체 쿼리 결과 확인
- 값 중첩 매개 변수를 기반으로 결과를 가져 오기 위해 mongodb를 쿼리하는 방법은 무엇입니까?
- java - Hibernate Search를 사용하여 JPA 쿼리 결과에 대한 전체 텍스트 검색 수행
- sql server - 쿼리를 기반으로 결과를 제한하는 방법
- mysql - wp_comments 테이블에 대한 중복 결과를 삭제하는 데만 사용할 SQL 쿼리는 무엇입니까?
- Elasticsearch 쿼리는 결과가 없습니다
- sql - 정확히 동일한 쿼리를 두 번 사용할 때 Athena 쿼리 결과가 다릅니다
- PHP의 csv 파일에 SQL Oracle 쿼리 결과를 추가하는 방법은 무엇입니까?
- java - ORA-00979의 jOOQ JSON 쿼리 결과
- 잘못된 결과를 제공하는 SQL Server 쿼리
- javascript - 축을 사용하여 쿼리 결과에 하위 쿼리를 추가하는 방법
- listview - django valueerror - "user"를 쿼리 할 수 없습니다 : "profile"인스턴스 여야합니다
- sql - 조인 후 조인에 대한 c # net에서 올바른 Linq 쿼리 구문을 구성하는 데 문제가 있습니다
- python - sqlite 쿼리 - 0 개의 결과를 반환하는 select from
- apache spark - pyspark에서 쿼리를 실행할 수 없습니다
SQL Server 2019를 사용하는 경우
_UTF8
로 끝나는 데이터 정렬을 사용하려고합니다._AS
보다는 . 데이터 정렬 유형에 대한 자세한 내용은 여기에 전체 기사가 있습니다.https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-2017#utf-8-support
이전 MSSQL 2019,
이것이 Python 3에서 작동한다는 것을 알고 있습니다.